using System;
using Glue.Internals.Nulls;

namespace Glue.Internals
{
    /// <summary>
    /// Represents a "property" on an object. Properties, methods and fields are examples of ObjectMembers.
    /// </summary>
    internal interface IObjectMember
    {
        String Name { get; }
        Type MemberType { get;}
        bool CanGetValues { get; }
        bool CanSetValues { get; }
        object InvokeGet(object toInvokeOn);
        void InvokeSet(object toInvokeOn, object toSet);
        /// <summary>
        /// This returns nothing if this member is not a simplified nesting
        /// </summary>
        Maybe<IHoldDifferentBaseMemberName> GetParentProperty();
        bool CanMapFrom(object thisObject);
    }
}